package services

import (
	"encoding/json"
	"fmt"

	"github.com/sirupsen/logrus"
)

// 183	weekSwitch	//	星期开关     1字节8个位，1~7位分别代表星期一到星期日
// 184	cycleStartTime1	//	循环开启时间1   小时（1字节）
// 185		//	循环开启时间1   分钟（1字节）
// 186	cycleEndTime1	//	循环关闭时间1   小时（1字节）
// 187		//	循环关闭时间1   分钟（1字节）
// 188	duration1	//	开启时长1    小时（1字节）
// 189		//	开启时长1    分钟（1字节）
// 190		//	开启时长1    秒（1字节）
// 191	interval1	//	间隔时长1    小时（1字节）
// 192		//	间隔时长1    分钟（1字节）
// 193		//	间隔时长1    秒（1字节）
// 194	mistMode1	//	雾化模式1    0 正常  1动感模式  2 跟随外界
// 195	mistSpeed1	//	雾化速度1   0~100%
// 196	scheduledStartTime1	//	定时开启时间1   小时（1字节）
// 197		//	定时开启时间1   分钟（1字节）
// 198	scheduledDuration1	//	定时开启时长1    分钟（1字节）
// 199		//	定时开启时长1    秒（1字节）
// 200	scheduledStartTime2	//	定时开启时间2   小时（1字节）
// 201		//	定时开启时间2  分钟（1字节）
// 202	scheduledDuration2	//	定时开启时长2    分钟（1字节）
// 203		//	定时开启时长2    秒（1字节）
// 204	weekSwitch1	//	星期开关     1字节8个位，1~7位分别代表星期一到星期日
// 205	mistCycleRefillTime	//	雾化循环补水时间 分钟
// 206	humidityLowerLimit	//	湿度模式下限
// 207	humidityUpperLimit	//	湿度模式上限
// 208	autoModeSwitch	//	自动模式开关
// 209	mistControlRegister	//	雾化控制寄存器
// 210	coolingMode	//	降温模式
// 211	postSprayVentDuration	//	喷淋停止后通风   分钟
// MistControlParams 定义了雾化控制参数的结构体

// ParseMistControlData 解析雾化控制器的数据
func (d *DeviceData) ParseMistCtrlTData() error {
	if len(d.RegisterData) < 29 { // 确保数据长度足够
		return fmt.Errorf("payload:%v data length is invalid", d.RegisterData)
	}

	mistCtrlParams := MistCtrlTParams{
		WeekSwitch:            d.RegisterData[0],
		CycleStartTime1:       fmt.Sprintf("%d:%d", d.RegisterData[1], d.RegisterData[2]),
		CycleEndTime1:         fmt.Sprintf("%d:%d", d.RegisterData[3], d.RegisterData[4]),
		Duration1:             fmt.Sprintf("%d:%d:%d", d.RegisterData[5], d.RegisterData[6], d.RegisterData[7]),
		Interval1:             fmt.Sprintf("%d:%d:%d", d.RegisterData[8], d.RegisterData[9], d.RegisterData[10]),
		MistMode1:             d.RegisterData[11],
		MistSpeed1:            d.RegisterData[12],
		ScheduledStartTime1:   fmt.Sprintf("%d:%d", d.RegisterData[13], d.RegisterData[14]),
		ScheduledDuration1:    fmt.Sprintf("%d:%d", d.RegisterData[15], d.RegisterData[16]),
		ScheduledStartTime2:   fmt.Sprintf("%d:%d", d.RegisterData[17], d.RegisterData[18]),
		ScheduledDuration2:    fmt.Sprintf("%d:%d", d.RegisterData[19], d.RegisterData[20]),
		MistCycleRefillTime:   d.RegisterData[21],
		HumidityLowerLimit:    d.RegisterData[22],
		HumidityUpperLimit:    d.RegisterData[23],
		AutoModeSwitch:        d.RegisterData[24],
		MistControlRegister:   d.RegisterData[25],
		CoolingMode:           d.RegisterData[26],
		PostSprayVentDuration: d.RegisterData[27],
	}

	// 将参数结构体转化为JSON格式
	payload, err := json.Marshal(mistCtrlParams)
	if err != nil {
		return fmt.Errorf("error marshalling mist control data: %v", err)
	}

	// 输出日志
	logrus.Infof("Mist Control Data: %s", payload)

	// 发送数据到平台
	err = PublishEvent(d.Mac, payload)
	if err != nil {
		return fmt.Errorf("error publishing event: %v", err)
	}

	return nil
}
